# 1. docker之概述
# docker是什么
docker是由go语言开发实现,基于linux内核的cgroup,namesqace以及AUFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术,
由于隔离的进程独立于宿主机和其它的隔离的进程,因此也称其为容器
最早实现是基于LXC的,但从0.7版本后,开始去除了LXC,转而使用了自行开发的libcontainer,在1.11版本开始后,则进一步使用了runC和containerd.
docker也是使用最广泛的开源容器引擎
docker不是容器,它是容器引擎,并不是容器,而是创建容器
docker是一种操作系统级的虚拟化技术
它是基于Linux,共享了linux内核,以及所有涉到的所有硬件资源
它本身不会虚拟硬件,只会共享使用宿主机的硬件
所以docker是在进程层面上的隔离
docker依赖linux内核特性,namespace(资源隔离),cgroups(资源限制) ,来实现隔离
docker也可以说是一个简单的应用程序打包工具
打包的是项目代码以及项目所使用的环境
用于保障完整性,一致性,易迁移性,标准化。
docker也是一种跨平台的开源项目
# docker的基本组成
docker是由,客户端,守护进程,镜像,容器,镜像仓库为基本架构组成
- docker Client:客户端
- Ddocker Daemon:守护进程
- 提供一个管理工具,可以使用docker的命令来管理
- 也就是说,docker是C/S(客户端client-服务器server)的模式
- docker通过客户端连接守护进程,通过命令向守护进程发出请求,守护进程通过一系列的操作后返回结果
- docker客户端可以连接本地或者远程的守护进程
- docker客户端和服务器是通过socket或RETSful API 来进行通信
- Docker lmages:镜像
- docker镜像是容器的基石,容器基于镜像启动和运行,镜像就类似于容器的源代码,保存了容器各种启动的条件
- 镜像也是一个层叠的只读文件系统 或 分层的只读文件系统
- Docker Container:容器
- 容器通过镜像来启动,容器是docker的执行来源,可以执行一个或多少进程
- 镜像也相当于构建和打包阶段
- 容器也相当于启动和执行阶段
- 容器启动时,容器可以运行,开始,停止,移动,删除。
- 每个容器都是独立的,安全的应用级平台
- Docker Registry:镜像仓库
- 镜像仓库是用于保存镜像,镜像仓库也分为,公有和私有仓库
- docker官方有提供公有仓库docker hub,网址:hub.docker.com (opens new window)
- 我们也可以搭建属于自己的私有仓库
以下图,来源于官方
# 容器跟虚拟机的区别
虚拟机是硬件级虚拟化,也可以是系统级虚拟化,需要虚拟出独立的虚拟硬件
容器是系统级虚拟化,只能在操作系统上使用,不会虚拟出虚拟硬件,它是共享宿主机本身的硬件
容器:创建容器就像是创建进程一样,方便,浪费资源小
虚拟机:虚拟机使用,需要虚拟出完整的系统级,启动时慢,资源比较浪费
# docker常见的应用场景
- 应用程序打包和发布
- 应用程序的隔离
- 虽然docker是进程级别的隔离,但是在一台宿主机上有多台docker容器,这多台容器是相互隔离的,不相通的。
- 持续集成
- 使用docker在持续集成方向,交付镜像进行集成
- 部署微服务
- 快速搭建测试环境
- 提供PaaS产品(平台即服务)
- 类似于,阿里云的容器云,腾讯云的容器云等
← 介绍 2. docker之安装 →